2010年11月24日
川俣晶の縁側ソフトウェア技術雑記 total 6660 count

.NET FrameworkのList<T>のインスタンスの複製を作る方法

Written By: 川俣 晶連絡先

 うっかり見落としていました。

 ArrayList.Cloneメソッドを置き換えるList<T>のそのものずばりのメソッドは無いと思っていました。

 従来の解釈はこれ。

  • ToAttayメソッド→配列への変換
  • ToListメソッド→List<T>への変換

 ところは、この2つはIEnumerable<T>のメソッドだから、IEnumerable<T>を実装したList<T>でも使用できます。その場合、ToListは自分自身の取得を意味するかというとさにあらず。ちゃんと新規に作ったList<T>のインスタンスを返してくれるようです。

using System;

using System.Collections.Generic;

using System.Linq;

class Program

{

    static void Main(string[] args)

    {

        var a = new List<string>() { "abc", "def" };

        var b = a.ToList();

        var c = a;

        Console.WriteLine("a and b is same instance?: {0}", a == b);

        Console.WriteLine("a and c is same instance?: {0}", a == c);

    }

}

実行結果 §

a and b is same instance?: False

a and c is same instance?: True

余談 §

 LINQのメソッドなので、.NET Framework 3.5以降でしか使用できないテクニックです。using System.Linq;も必須です。それゆえに、2.0~3.0のList<T>はあるのにLINQ非対応のバージョンでは使えない方法です。